package utils

import (
	"errors"
	"k8s-admin/dao/kubernetes"
	"k8s-admin/global"
	"k8s-admin/models"
	"log"
	"time"
)

func TimedTask() {
	ticker := time.NewTicker(time.Second * 15)
	for {
		<-ticker.C
		ClusterCheck()
	}

}

func ClusterCheck() {
	//从数据库中查询已存在的集群信息
	global.ClientSetCache.Flush()         // 清空缓存
	clusters, err := SelectClustersList() // 查询数据库中的所有集群信息]
	if err != nil {
		global.TPLogger.Error("获取k8s集群列表失败：", err)
		//errors.New("获取k8s集群列表失败")
	} else {
		for _, cluster := range clusters {
			decodeConfig, _ := DecodeBase64(cluster.Text)
			go func() {
				_, err = global.NewClientInterface().NewClientSet(decodeConfig)
				if err != nil {
					global.TPLogger.Error("初始化clientSet失败：", err)
					err = kubernetes.NewK8sCluster().UpdateK8sCluster(cluster.CID, 1)
					if err != nil {
						global.TPLogger.Error("数据库集群状态更新失败：", err.Error())
					}
				} else {
					if cluster.Status != 0 {
						err = kubernetes.NewK8sCluster().UpdateK8sCluster(cluster.CID, 0)
						if err != nil {
							global.TPLogger.Error("数据库集群状态更新失败：", err.Error())
						}
					} else {
						log.Printf("服务正常，集群版本为:%s", cluster.Version)
					}
				}
			}()
		}
	}
}

func SelectClustersList() ([]models.Configs, error) {
	var list []models.Configs
	tx := global.GORM.Find(&list)
	if tx.Error != nil {
		global.TPLogger.Error(tx.Error.Error())
		return nil, tx.Error
	} else if tx.RowsAffected == 0 {
		global.TPLogger.Error(errors.New("没有查询到集群数据"))
		return nil, errors.New("没有查询到集群数据")
	} else {
		return list, nil
	}
}
